"""
    1. 实例化fast
        fast = cv.FastFeatureDetector_create(threshold, nonmaxSuppression)
            参数：threshold：阈值t，有默认值10，nonmaxSuppression:是否进行非极大值抑制，默认值True
            返回：Fast:创建的FastFeatureDetector对象
    2. 利用fast.detect检测关键点，没有对应的关键点描述
        fp = fast.detect(grayImg, None)
            参数：gray：进行关键点检测的图像，注意是灰度图像
            返回：kp:关键点信息，包括位置，尺度，方向信息
    3. 将关键点检测结果绘制在图像上，与在sift中是一样的
        cv.drawKeypoints(image, keypoints, outputimage, color, flags)
"""
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 1. 读取图像，并转换成灰度图像
img = cv.imread("image/tv.jpg")

# 2. Fast角点检测
# 2.1 创建一个Fast对象，传入阈值，注意：可以处理彩色空间图像
fast = cv.FastFeatureDetector_create(threshold=30)
# 2.2 检测图像上的关键点
kp = fast.detect(img, None)
# 2.3 在图像上绘制关键点
img2 = cv.drawKeypoints(img, kp, None, color=(0, 0, 255))

# 2.4 输出默认参数
print("Threshold:{}".format(fast.getThreshold()))
print("nonmaxSuppression:{}".format(fast.getNonmaxSuppression()))
print("neighborhood:{}".format(fast.getType()))
print("Total Keypoints with nonmaxSuppression:{}".format(len(kp)))

# 2.5 关闭非极大值抑制
fast.setNonmaxSuppression(0)
kp = fast.detect(img, None)

print("Total Keypoints with nonmaxSuppression:{}".format(len(kp)))
# 2.6 绘制为进行非极大值抑制的结果
img3 = cv.drawKeypoints(img, kp, None, color=(0, 0, 255))

# 3. 绘制图像
fig, axes = plt.subplots(nrows=1, ncols=2, figsize=(10, 8), dpi=100)
axes[0].imshow(img2[:, :, ::-1])
axes[0].set_title("加入非极大值抑制")
axes[1].imshow(img3[:, :, ::-1])
axes[1].set_title("未加入非极大值抑制")
plt.show()




